from flask import request,g
import jwt
import time
from flask import jsonify
from functools import wraps #类装饰器
#导入用户表：这个根据用户自己来
from apps.user.models import UserModel


JWT_SECRET_KEY = '$#%^&&*(DFHJKUTYGHF112312' #加密的盐
ALGORITHM = 'HS256' #加密算法

#生成token
def jwt_encode_token(user_id:int,time_out=7*24*60*60):
    payload = {
        'user_id': user_id,
        'iat': time.time(), #产生token时的时间戳
        'exp': time.time() + time_out #token过期时间戳
    }
    token = jwt.encode(payload, JWT_SECRET_KEY, algorithm=ALGORITHM)
    return token

#解析token
def jwt_decode_token(token):
    secret = JWT_SECRET_KEY
    payload = jwt.decode(token,secret,algorithms=ALGORITHM)
    return payload


#依赖于请求中间件先实现认证功能，再从request或g对象中取出用户信息
def authen_admin_required_middle(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if not hasattr(request,'user'):
            return jsonify({'code':410,'msg':'请先登录'}),403
        if request.user.role_id !=1:
            return jsonify({'code':410,'msg':'没有管理员权限，无法操作'}),403
        #认证通过，执行视图函数
        return func(*args,**kwargs)
    return wrapper

if __name__ == '__main__':
    token = jwt_encode_token(78)
